#define _CRT_SECURE_NO_WARNINGS
#include<vector>
#include<iostream>
using namespace std;

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> vvans(intervals.begin(), intervals.end());
        vector<vector<int>>::iterator it1 = vvans.begin();
        while (it1 < vvans.end()) {
            int flag = 1;
            vector<vector<int>>::iterator it2 = it1 + 1;
            while (it2 < vvans.end()) {
                int flag2 = 1;
                if ((*it1)[1] >= (*it2)[0] && (*it1)[1] <= (*it2)[1]) {
                    if ((*it1)[0] >= (*it2)[0]) {
                        it1 = vvans.erase(it1);
                        flag = 0;
                    }
                    else if ((*it1)[0] < (*it2)[0]) {
                        (*it1)[1] = (*it2)[1];
                        it2 = vvans.erase(it2);
                        flag = 0;
                        flag2 = 0;
                    }
                }
                else if ((*it1)[1] >= (*it2)[1]) {
                    if ((*it1)[0] >= (*it2)[0] &&
                        (*it1)[0] <= (*it2)[1]) {
                        (*it2)[1] = (*it1)[1];
                        it1 = vvans.erase(it1);
                        flag = 0;
                    }
                    else if ((*it1)[0] < (*it2)[0]) {
                        it2 = vvans.erase(it2);
                        flag2 = 0;
                    }
                }
                if (flag2) ++it2;
            }
            if (flag)++it1;
        }
        return vvans;
    }
};
int main()
{
    vector<vector<int>> vv = { {1,3},{2,6},{8,10},{15,18} };
    Solution hello;
    vector<vector<int>> outcome = hello.merge(vv);
    for (auto tmp : outcome) {
        cout << tmp[0] << " " << tmp[1] << endl;
    }
    return 0;
}

//class Solution {
//public:
//    vector<vector<int>> merge(vector<vector<int>>& intervals) {
//        vector<vector<int>> vvans(intervals.begin(), intervals.end());
//        for (int i = 0; i < vvans.size(); i++) {
//            for (int j = i + 1; j < vvans.size(); j++) {
//                if (vvans[i][1] >= vvans[j][0] && vvans[i][1] <= vvans[j][1]) {
//                    if (vvans[i][0] >= vvans[j][0]) {
//                        vvans.erase(find(vvans.begin(), vvans.end(), vvans[i])), j--;
//                    }
//                    else if (vvans[i][0] < vvans[j][0]) {
//                        vvans[i][1] = vvans[j][1];
//                        vvans.erase(find(vvans.begin(), vvans.end(), vvans[j])), j--;
//                    }
//                }
//                else if (vvans[i][1] >= vvans[j][1]) {
//                    if (vvans[i][0] >= vvans[j][0] && vvans[i][0] <= vvans[j][1]) {
//                        vvans[j][1] = vvans[i][1];
//                        vvans.erase(find(vvans.begin(), vvans.end(), vvans[i])), j--;
//                    }
//                    else if (vvans[i][0] < vvans[j][0]) {
//                        vvans.erase(find(vvans.begin(), vvans.end(), vvans[j])), j--;
//                    }
//                }
//            }
//        }
//        return vvans;
//    }
//};